﻿using System;
using System.Windows;

namespace AMEE1
{

    /// <summary>
    /// Funktion zum Berrechnen des 'Rewards' aus Unebenheit am Trittpunkt und zurückgelegter Strecke
    /// Richtung Ziel.
    /// </summary>
    /// <param name="zielNaherung">ziel naherung.</param>
    /// <param name="unebenheit">unebenheit.</param>
    /// <returns>Vergeltung (Reward)</returns>
    public delegate double Vergeltungssunktion(double zielNaherung, double unebenheit);

    /// <summary>
    /// Sigmoidfunktion zur Berechnung des Rewards eines InputParameters.
    /// </summary>
    public class Vergeltung
    {
        /// <summary>
        /// Gets or sets the limit. Ergebnis geht von -Limit bis +Limit
        /// </summary>
        /// <value>
        /// The limit.
        /// </value>
        public double Limit { get; set; }

        /// <summary>
        /// Parameter zum Einstellen, wie schnell sich die Funktion dem Limit nähert.
        /// Für Wendepunkt = (0,0) gilt: Eval(2/Steilheit) = 0.76 * Limit
        /// </summary>
        /// <value>
        /// The steilheit.
        /// </value>
        public double Steilheit { get; set; }

        /// <summary>
        /// Gets or sets the wendepunkt. Normalerweise liegt der bei (0,0).
        /// </summary>
        /// <value>
        /// The wendepunkt.
        /// </value>
        public Vector Wendepunkt { get; set; }

        public double Eval(double x) {
            return Sigmoid.Sigmoid.ESigmoid(x, Limit, Steilheit, Wendepunkt.X, Wendepunkt.Y);
        }
    }


}
